from snownlp import SnowNLP
import pandas as pd
import numpy as np
import re
import jieba

# 加载数据
data = pd.read_excel('cleaned_data.xlsx')

# 分词和去停用词
stopwords = ['景区', '景色', '人', '好', '的']


def tokenize_and_remove_stopwords(text):
    if isinstance(text, str):  # 确保是字符串类型
        words = jieba.cut(text)
        return ' '.join([word for word in words if word not in stopwords])
    return ''


data['评价分词'] = data['评价'].apply(tokenize_and_remove_stopwords)

print("成功加载分词!")


# 使用 SnowNLP 进行情感分析，并四舍五入到小数点后三位
def analyze_sentiment(text):
    if isinstance(text, str):
        return round(SnowNLP(text).sentiments, 3)
    return 0.0


data['情感得分_snownlp'] = data['评价'].apply(analyze_sentiment)

print("成功使用 SnowNLP 进行情感分析!")

# 使用情感词典
# 一个简单的情感词典，正面词汇和负面词汇
positive_words = ['好', '喜欢', '爱', '开心', '不错', '推荐', '值得', '美', '优惠', '方便', '不累', '漂亮', '靠谱']
negative_words = ['差', '讨厌', '不好', '人多', '脏', '乱', '累']


def sentiment_score(text):
    score = 0
    for word in text:
        if word in positive_words:
            score += 1
        elif word in negative_words:
            score -= 1
    return score


data['情感得分_词典'] = data['评价分词'].apply(sentiment_score)

print("成功使用情感词典进行分析!")

# 合并情感得分，假设简单平均
data['情感得分'] = (data['情感得分_snownlp'] + (data['情感得分_词典'] + 1) / 100)

# 二分类标签
data['情感标签'] = data['情感得分'].apply(lambda x: 1 if x > 0.5 else 0)
print("成功得到情感标签!")

# 导出为 Excel 文件
data.to_excel('emotion_data.xlsx', index=False)
